package com.exonline.commons.utils;

import javax.servlet.http.HttpServletRequest;
/**
 * @desc   sql语句生成工具类，目的是根据条件，拼接生成不同的sql语句实现
 * @author hbrj
 */
public class SqlConditionBuilder {


    /**
     * @desc 1.针对课程筛选的方法 生成sql语句的WHERE 后的条件部分
     * condition参数值: 第一位t上架/f下架/A全部  第二位f免费/p付费/A全部
     * 示例: aa 全部课程 tf 上架状态的免费课程
     * name参数值,可选,带有此参数时,根据名称精确查询
     *
     * @author hbrj
     */

    public static String buildCourseCondition(HttpServletRequest request) {
        //1.根据 request 参数生成 SQL 条件
        StringBuilder sqlCondition = new StringBuilder();

        //2.获取 condition 参数
        //2.1获取前端页面传递过来的 condition 参数
        // 且condition参数长度为2，表示为两种情况，第一个长度上的值的内容表示为第一种为审核状态（t=上价架，f=待审核，e=已驳回,A=全部状态），
        // 第二个长度上的值的内容表示为第二种价格（f=免费，p=付费，A=全部）
        String condition = request.getParameter("condition");
        if (condition != null && condition.length() >= 2) {
            // 2.2第一个参数 (t/f) 判断 cstatus
            char statusChar = condition.charAt(0);
            if (statusChar == 't') {
                sqlCondition.append("cstatus = '1'"); // 课程状态为上架
            } else if (statusChar == 'f') {
                sqlCondition.append("cstatus = '0'");  //课程状态为待审核
            } else if (statusChar == 'A') {  // 如果cstatus为A则表示全部状态
                sqlCondition.append("1=1");
            } else if (statusChar == 'e') {//课程状态为下架
                sqlCondition.append("cstatus = '2'");
            }

            // 2.3第二个参数 (f/p) 判断 cprice
            char priceChar = condition.charAt(1);
            if (priceChar == 'f') {//根据前台传递过啦的第二参数进行判断，如果为f表示课程免费
                sqlCondition.append(" AND cprice  LIKE '0%'");
            } else if (priceChar == 'p') {//如果为p表示为付费课程
                sqlCondition.append(" AND cprice NOT LIKE '0%'");
            } else if (priceChar == 'A') {//如果cprice为A则表示全部价格（此时是为了查询组合逻辑方便才这样写的）
                sqlCondition.append(" AND 1=1");
            }
        }

        // 3.按照课程名进行条件查询
        String name = request.getParameter("cname");
        if (name != null && !name.isEmpty()) {
            if (sqlCondition.length() > 0) {
                sqlCondition.append(" AND ");
            }
            sqlCondition.append("cname like '").append(name+"%").append("'");
        }

        // 4.返回最终生成的 SQL 条件部分
        return sqlCondition.toString();
    }


    /**
     * @desc 2.根据条件生成全部sql语句
     * condition参数值:  第一位:t活跃/f封号   第二位:角色身份,t老师/s学生/a管理员
     * 示例: ts 账号处于活跃状态的学生
     *
     * @author hbrj
     */
    public static String buildUserQueryFullSqlCondition(HttpServletRequest request) {

        StringBuilder sqlCondition = new StringBuilder();

        //1.获取 condition 参数
        String condition = request.getParameter("condition");

        //2.根据 condition 参数生成 SQL 条件,且condition参数的长度为2
        if (condition != null && condition.length() >= 2) {
            //2.1第2个位置上的值表示为角色即: t=老师、s=学生、a=管理员
            char roleChar = condition.charAt(1);
            if (roleChar == 't') {
                sqlCondition.append(" SELECT t.id,tname as name,workyears,direction,introduce,email,phone,password,status,registrationtime,lastlogintime FROM ");
                sqlCondition.append("teacher t");
                sqlCondition.append("  JOIN ");
                sqlCondition.append("userrole u ON t.id = u.tid");

            } else if (roleChar == 's') {
                sqlCondition.append(" SELECT * FROM ");
                sqlCondition.append("student s");
                sqlCondition.append(" JOIN ");
                sqlCondition.append("userrole u ON s.id = u.sid");
            } else if (roleChar == 'a') {
                sqlCondition.append(" SELECT * FROM ");
                sqlCondition.append("admin a");
                sqlCondition.append(" JOIN ");
                sqlCondition.append("userrole u ON a.id = u.aid ");
            }


            //2.2右边连接
            sqlCondition.append(" JOIN role r ON r.id = u.rid");

            sqlCondition.append(" WHERE ");
            //2.3第个位置上的值表示为
            char statusChar = condition.charAt(0);
            if (statusChar == 't') {
                sqlCondition.append("status = '1'");
            } else if (statusChar == 'f') {
                sqlCondition.append("status = '0'");
            } else if (statusChar == 'A') {
                sqlCondition.append("1=1");
            }

        }

        //3.检查是否有 name 参数
        String name = request.getParameter("name");
        if (name != null && !name.isEmpty()) {
            if (sqlCondition.length() > 0) {
                sqlCondition.append(" AND ");
            }
            sqlCondition.append("cname = '").append(name).append("'");
        }
        //4.返回最终生成的 SQL 条件部分
        return sqlCondition.toString();
    }
}


